unsigned __int64 __fastcall std::__ndk1::basic_string<char,std::__ndk1::char_traits<char>,std::__ndk1::allocator<char>>::basic_string<decltype(nullptr)>(unsigned __int64 *a1, __int64 a2)
{
  unsigned __int64 *v2; // x19
  __int64 v3; // x20
  unsigned __int64 result; // x0
  unsigned __int64 v5; // x21
  signed __int64 v6; // x19
  unsigned __int64 v7; // x22
  __int64 v8; // x0
  MD5 *v9; // x0
  const char *v10; // x1
  unsigned int v11; // w2

  v2 = a1;
  *a1 = 0LL;
  a1[1] = 0LL;
  a1[2] = 0LL;
  v3 = a2;
  result = strlen(a2);
  if ( result < 0xFFFFFFFFFFFFFFF0LL )
  {
    v5 = result;
    if ( result >= 0x17 )
    {
      v7 = (result + 16) & 0xFFFFFFFFFFFFFFF0LL;
      v8 = operator new(v7);
      v2[1] = v5;
      v2[2] = v8;
      *v2 = v7 | 1;
      v6 = v8;
    }
    else
    {
      *(_BYTE *)v2 = 2 * result;
      v6 = (signed __int64)v2 + 1;
      if ( !result )
        goto LABEL_7;
    }
    result = memcpy(v6, v3, v5);
LABEL_7:
    *(_BYTE *)(v6 + v5) = 0;
    return result;
  }
  v9 = (MD5 *)std::__ndk1::__basic_string_common<true>::__throw_length_error(v2);
  return MD5::update(v9, v10, v11);
}